/**
 *  @param {object} geometry  是要素的几何信息(不是坐标)  feature.getGeometry();
 *  @param {object} service {docName,layerId}
 */
export class Query {
    /* FID查询 */
    static queryByFID({
        fid,
        service,
        callback
    }) {
        //1、初始化查询结构对象，设置查询结构包含几何信息
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true;
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false;
        //2、实例化查询参数对象
        var queryParam = new Zondy.Service.QueryParameter({
            objectIds: fid,
            resultFormat: "json",
            struct: queryStruct
        });
        //3、实例化地图文档查询服务对象
        var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {
            ip: "localhost",
            port: "6163"    //访问IGServer的端口号，.net版为6163，Java版为8089
        });
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback);
    }
    /* 属性查询 SQL */
    static queryByAttr({
        where,
        service,
        callback
    }) {
        //初始化查询结构对象，设置查询结构包含几何信息
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true;
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false;
        //实例化查询参数对象
        var queryParam = new Zondy.Service.QueryParameter({
            resultFormat: "json",
            struct: queryStruct
        });
        /* 1、确定查询参数 */
        queryParam.where = where
        /* 2、调用查询服务 */
        var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {
            ip: "localhost",
            port: "6163"    //访问IGServer的端口号，.net版为6163，Java版为8089
        });
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback);
    }
    /* 通过要素的几何信息查询 */
    static queryByGeom({
        geometry,
        service,
        callback
    }) {
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true;
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false;
        //创建一个用于查询的区,用交互式画笔创建的区查询
        var geomObj = new Zondy.Object.Polygon();
        geomObj.setByOL(geometry);
        //指定查询规则
        var rule = new Zondy.Service.QueryFeatureRule({
            //是否将要素的可见性计算在内
            EnableDisplayCondition: false,
            //是否完全包含
            MustInside: false,
            //是否仅比较要素的外包矩形
            CompareRectOnly: false,
            //是否相交
            Intersect: true
        });
        //实例化查询参数对象
        var queryParam = new Zondy.Service.QueryParameter({
            geometry: geomObj,
            resultFormat: "json",
            struct: queryStruct,
            rule: rule
        });
        //设置查询分页号
        queryParam.pageIndex = 0;
        //设置查询要素数目
        queryParam.recordNumber = 1000;
        var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {
            ip: "localhost",
            port: "6163"    //访问IGServer的端口号，.net版为6163，Java版为8089
        });
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback);
    }
    /* 查询图层  的所有要素 */
    static queryByLayerID({ service, callback }) {
        // 1 初始化查询结构对象，设置查询结构包含几何信息
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //{IncludeAttribute: true, IncludeGeometry: false, IncludeWebGraphic: false}
        queryStruct.IncludeGeometry = true; // 默认为false  就不查询几何信息
        queryStruct.IncludeWebGraphic = true; // 默认为false  不查询样式信息
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        // 3 实例化查询参数对象  查询规则
        var queryParam = new Zondy.Service.QueryParameter({
            resultFormat: 'json',
            struct: queryStruct,
        });
        //设置查询分页号
        queryParam.pageIndex = 0;
        //设置查询要素数目
        queryParam.recordNumber = 1000;
        // 4 实例化地图文档查询服务对象
        var queryService = new Zondy.Service.QueryDocFeature(
            queryParam,
            service.docName,
            service.layerId,
            {
                ip: 'localhost',
                port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
            }
        );
        //执行查询操作，querySuccess为查询成功回调函数
        queryService.query(callback);
    }
    /* 根据属性查询 核心where 添加分页 */
    static queryBySql({ where, service, callback }) {
        /* 实现属性查询语句 */
        //1、确定查询结构
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true;
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false;
        //2、实例化查询参数
        var queryParam = new Zondy.Service.QueryParameter({
            resultFormat: 'json',
            struct: queryStruct,
        });
        /* 设置查询条件 */
        queryParam.where = where;
        //设置查询分页号
        queryParam.pageIndex = 0;
        //设置查询要素数目
        queryParam.recordNumber = 1000;
        /* 3、调用服务器 */
        //实例化地图文档查询服务对象
        var queryService = new Zondy.Service.QueryDocFeature(
            queryParam,
            service.docName,
            service.layerId,
            {
                ip: 'localhost',
                port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
            }
        );
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback);
    }
    /* 矢量图层查询,基于图层名称 */
    static queryByLayerUrl({ url, callback }) {
        var queryStruct = new Zondy.Service.QueryFeatureStruct()
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true
        //是否包含属性信息
        queryStruct.IncludeAttribute = true
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false
        //创建查询的图层路径,提前存储在空间数据库中
        var LayerNameUrl = url
        //实例化查询参数对象
        var queryParam = new Zondy.Service.QueryByLayerParameter(LayerNameUrl, {
            resultFormat: 'json',
            struct: queryStruct,
        })
        //设置查询分页号
        queryParam.pageIndex = 0
        //设置查询要素数目
        queryParam.recordNumber = 20
        //实例化地图文档查询服务对象
        var queryService = new Zondy.Service.QueryLayerFeature(queryParam, {
            ip: 'localhost',
            port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
        })
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback)
    }
}